﻿#define _CRT_SECURE_NO_WARNINGS 1

//a a a b b ababa a = 3 n = 5 b = 2 max = x,x = (n + 1) / 2
//a a a a b b b abababa a = 4 n = 7 b = 3,x = (n + 1) / 2
//a a a b b b c abababc,x < (n + 1) / 2
//a a a a a b x > (n + 1) /2
//由上面例子可以得出，只有最大数量的字符的小于等于(n + 1) / 2才可以
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n = 0;
    cin >> n;
    vector<char> result(n);
    int hash[26] = { 0 };
    string str;
    cin >> str;

    int MaxIndex = 0, Maxcount = 0;
    for (int i = 0; i < n; ++i)//存入哈希表
    {
        hash[str[i] - 'a']++;
        if (hash[str[i] - 'a'] > Maxcount)//记录出现次数最多的值
        {
            MaxIndex = str[i] - 'a';
            Maxcount = hash[str[i] - 'a'];
        }
    }

    if (Maxcount > (n + 1) / 2)
        cout << "no" << endl;
    else
    {
        cout << "yes" << endl;
        int index = 0;
        while (Maxcount--)//模拟，先填数量最大的
        {
            result[index] = MaxIndex + 'a';
            index += 2;
        }

        for (int i = 0; i < 26; ++i)//填剩下的
        {
            while (hash[i] && i != MaxIndex)
            {
                if (index >= n) index = 1;
                result[index] = i + 'a';
                index += 2;
                --hash[i];
            }
        }

        for (int i = 0; i < n; ++i)
        {
            cout << result[i];
        }
        cout << endl;
    }
    return 0;
}

/*
链接：https://ac.nowcoder.com/acm/problem/222104
来源：牛客网
题目描述
小红拿到了一个只由小写字母组成的字符串。她准备把这个字符串重排（只改变字母的顺序，不改变数量）
重排后小红想让新字符串不包含任意两个相同的相邻字母。
你能帮帮她吗？

输入描述:
第一行一个正整数n ，代表字符串的长度。(1≤n≤10^5)
第二行为一个长度为n 的、只由小写字母组成的字符串。
输出描述:
如果可以完成重排，请在第一行输出一个“yes”，第二行输出重排后的字符串。如果有多个正解，输出任意即可。
如果不能重排，则直接输出“no”
*/

